<script>
import tokenManager from './utils/token.js'

export default {
	onLaunch: function() {
		console.log('App Launch')
		// 检查用户信息有效性
		this.checkUserInfoValidity();
		// 检查token状态
		this.checkTokenStatus();
	},
	onShow: function() {
		console.log('App Show')
		// 每次显示时检查token状态
		this.checkTokenStatus();
	},
	onHide: function() {
		console.log('App Hide')
	},
	methods: {
		// 检查用户信息有效性
		async checkUserInfoValidity() {
			try {
				const token = uni.getStorageSync('token');
				const userInfo = uni.getStorageSync('userInfo');
				
				// 如果有token和用户信息，检查头像URL是否有效
				if (token && userInfo && userInfo.avatar && userInfo.avatar.startsWith('http')) {
					// 延迟检查，避免影响应用启动速度
					setTimeout(async () => {
						await this.validateAndRefreshUserInfo();
					}, 2000);
				}
			} catch (error) {
				console.error('检查用户信息有效性失败:', error);
			}
		},
		
		// 验证并刷新用户信息
		async validateAndRefreshUserInfo() {
			try {
				const token = uni.getStorageSync('token');
				if (!token) {
					return;
				}
				
				const response = await uni.request({
					url: 'http://localhost:8080/user/getUserInfo',
					method: 'GET',
					header: {
						'Authorization': `Bearer ${token}`
					}
				});
				
				if (response.data.code === 200 && response.data.data) {
					// 更新本地用户信息
					uni.setStorageSync('userInfo', response.data.data);
					console.log('应用启动时用户信息刷新成功');
				}
			} catch (error) {
				console.error('应用启动时刷新用户信息失败:', error);
			}
		},

		// 检查token状态
		async checkTokenStatus() {
			try {
				// 检查是否已登录
				if (!tokenManager.isLoggedIn()) {
					return;
				}

				// 检查token是否即将过期
				const tokenInfo = await tokenManager.checkTokenExpiration();
				
				if (tokenInfo.isExpired) {
					// token已过期，清除认证信息并跳转登录页
					console.log('Token已过期，跳转登录页');
					tokenManager.clearAuth();
					this.redirectToLogin();
					return;
				}

				if (tokenInfo.isExpiringSoon) {
					// token即将过期，尝试自动刷新
					console.log('Token即将过期，尝试自动刷新');
					const refreshSuccess = await tokenManager.autoRefreshToken();
					
					if (!refreshSuccess) {
						// 刷新失败，显示提示
						uni.showModal({
							title: '登录状态提醒',
							content: '您的登录状态即将过期，建议重新登录',
							showCancel: false,
							confirmText: '去登录',
							success: (res) => {
								if (res.confirm) {
									this.redirectToLogin();
								}
							}
						});
					} else {
						console.log('Token自动刷新成功');
					}
				}
			} catch (error) {
				console.error('检查token状态失败:', error);
			}
		},

		// 跳转到登录页
		redirectToLogin() {
			// 检查当前页面是否为登录页
			const pages = getCurrentPages();
			const currentPage = pages[pages.length - 1];
			
			if (currentPage && currentPage.route && currentPage.route.includes('login')) {
				return; // 已经在登录页，不需要跳转
			}

			// 跳转到登录页
			uni.reLaunch({
				url: '/pages/login/login'
			});
		}
	}
}
</script>

<style>
	/*每个页面公共css */
</style>
